import { ElNotification } from 'element-plus';
// 获取数据的全局工具函数，自动提示未登录情况，以及为数据赋值
let getData = (res,data) => { // res为返回的数据，data为需要赋值的数据
    if (res.code == -1) { // 若返回信息错误，token无效
        ElNotification({
          title: '登录失效，请重新登录',
          type: 'error'
        })
        data.value = []
      } else {
        data.value = res;
      }
};
// 当前选中数据赋值，将对象属性一个个赋值，防止vue监听不到
const currentDataChange = (row,data) => { // row是elementPlus的表格行数据，data是对话框的current数据
  Object.keys(row).forEach(key => { // 必须一个个属性赋值，不然vue无法监听到改变
    data[key] = row[key]
  })
}
// 判断是否为JSON数据
const isJSON = (str) => {
  try {
     JSON.parse(str);
     return true;
  } catch (e) {
     return false;
  }
}
// 获取今年第一天
const getYearFirstDay = () => {
  var y = new Date().getFullYear(); //获取年份
  return [y, '01', '01'].join("-");
}
// 获取今年最后一天
const getYearLastDay = () => {
  var y = new Date().getFullYear(); //获取年份
  return [y, '12', '31'].join("-");
}
// 获取当前年当前月第一天
const getMonthFirstDay = () => {
  var y = new Date().getFullYear(); //获取年份
  var m = new Date().getMonth() + 1; //获取月份
  var d = "01";
  m = m < 10 ? "0" + m : m; //月份补 0 
  return [y, m, d].join("-");
}
// 获取当前月最后一天
const getMonthLastDay = () => {
  var y = new Date().getFullYear(); //获取年份
  var m = new Date().getMonth() + 1; //获取月份
  var d = new Date(y, m, 0).getDate(); //获取当月最后一日
  m = m < 10 ? "0" + m : m; //月份补 0
  d = d < 10 ? "0" + d : d; //日数补 0 
  return [y, m, d].join("-");
}
// 获取本周第一天
const getWeekFirstDay = () => {
  let date = new Date()
  let week = date.getDay();  //获取周几 /0是周一
  let minus = week ? week - 1 : 6;  // 当前日期需要减去的天数(才是周一的天使/例如当前是周三，那么需要减去2天才是周一)
  date.setTime(date.getTime() - (24 * 60 * 60 * 1000 * minus)) //重新设置标准时间
  let weekStartStartDay = date.getFullYear() + '-' + (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-' + (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate())
  return weekStartStartDay
}
// 获取本周最后一天
const getWeekLastDay = () => {
  let date = new Date();
    let week = date.getDay();
    let minus = week ? 7 - week : 0;
    date.setTime(date.getTime() + (24 * 60 * 60 * 1000 * minus))
    let weekEndEndDay = date.getFullYear() + '-' + (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : (date.getMonth() + 1)) + '-' + (date.getDate() < 10 ? '0' + date.getDate() : date.getDate())
    return weekEndEndDay
}
// WebSocket心跳检测初始化函数
const initWebSocketHeartCheck = () => {
  return {
    timeout: 2 * 1000, // 心跳频率
    serverTimeout:  10 * 1000, // 服务器超时时间
    time: null,
    serverTimer: null,
    resetHeartCheck () { // 重置心跳函数
      clearTimeout(this.timer);
      clearTimeout(this.serverTimer);
      this.timer = null;
      this.serverTimer = null;
      return this;
    },
    startHeartCheck (ws) { // 开始心跳检测函数
      this.resetHeartCheck(); // 重置检测
      this.timer = setTimeout(() => { // 定时向服务端发送消息
        ws.send('ping'); 
        if (!this.serverTimer) { // 设置服务器过期时间
            this.serverTimer = setTimeout(() => { // 服务器超时，关闭连接触发重连
               console.log(new Date().toLocaleString(), "连接超时，关闭连接");
               ws.close(); //关闭websocket，触发close事件
            }, this.serverTimeout);
        }
      }, this.timeout);
    },
  }
}
export { getData , currentDataChange , isJSON, getMonthFirstDay, getMonthLastDay ,getYearFirstDay,getYearLastDay,getWeekFirstDay,getWeekLastDay ,initWebSocketHeartCheck};